home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 1.iso / ARGONET / PD / PROGRAMMING / DESKLIBC / SOURCES.ZIP / DeskLib / !DLSources / Libraries / Template / c / Clone < prev    next >
Text File  |  1993-07-14  |  3KB  |  96 lines

  1. /*
  2.     ####             #    #     # #
  3.     #   #            #    #       #          The FreeWare C library for 
  4.     #   #  ##   ###  #  # #     # ###             RISC OS machines
  5.     #   # #  # #     # #  #     # #  #   ___________________________________
  6.     #   # ####  ###  ##   #     # #  #                                      
  7.     #   # #        # # #  #     # #  #    Please refer to the accompanying
  8.     ####   ### ####  #  # ##### # ###    documentation for conditions of use
  9.     ________________________________________________________________________
  10.  
  11.     File:    Template.Clone.c
  12.     Author:  Copyright © 1992 Jason Williams
  13.              Thanks to John Winters for supplying the code that I hacked
  14.              changed, hacked, rewrote, and then wrote again from scratch!
  15.     Version: 1.11 (13 Jul 1993)
  16.     Purpose: Loading, cacheing, and retrieval of window templates
  17. */
  18.  
  19.  
  20. #include "TempDefs.h"
  21.  
  22.  
  23.  
  24. extern window_block *Template_Clone(char *name, int maxtitlesize)
  25. {
  26.   template_record *t;
  27.   window_block    *window;
  28.   int             icon;
  29.   icon_block      *icons;
  30.  
  31.   t = Template__FindTemplate(name);
  32.   if (t == NULL)
  33.     return(NULL);
  34.  
  35.   window = (window_block *) malloc(sizeof(window_block) +
  36.                                 (sizeof(icon_block) * t->windowdef->numicons));
  37.   if (window == NULL)
  38.     Error_ReportFatalInternal(ERR1, ERRMESS1);
  39.  
  40.   memcpy(window, t->windowdef, sizeof(window_block) +
  41.                                 (sizeof(icon_block) * t->windowdef->numicons));
  42.  
  43.   if (window->titleflags.data.indirected)
  44.   {
  45.     if (maxtitlesize == template_TITLEMIN)
  46.       maxtitlesize = window->title.indirecttext.bufflen;
  47.     else if (maxtitlesize < 1)
  48.       maxtitlesize = 260;                         /* default ind. title size */
  49.  
  50.     window->title.indirecttext.buffer  = (char *) malloc(maxtitlesize);
  51.     window->title.indirecttext.bufflen = maxtitlesize;
  52.     if (window->title.indirecttext.buffer == NULL)
  53.       Error_ReportFatalInternal(ERR1, ERRMESS1);
  54.  
  55.     strncpy(window->title.indirecttext.buffer,
  56.             t->windowdef->title.indirecttext.buffer,
  57.             window->title.indirecttext.bufflen-1);
  58.     window->title.indirecttext.buffer[window->title.indirecttext.bufflen-1] =0;
  59.   }
  60.  
  61.   icons = (icon_block *) ((int)window + sizeof(window_block));
  62.   for (icon = 0; icon < t->windowdef->numicons; icon++)
  63.   {
  64.     if (icons[icon].flags.data.indirected && icons[icon].flags.data.text)
  65.     {
  66.       char *oldtext = icons[icon].data.indirecttext.buffer;
  67.  
  68.       icons[icon].data.indirecttext.buffer = (char *)
  69.                                 malloc(icons[icon].data.indirecttext.bufflen);
  70.       if (icons[icon].data.indirecttext.buffer == NULL)
  71.         Error_ReportFatalInternal(ERR1, ERRMESS1);
  72.  
  73.       strncpy(icons[icon].data.indirecttext.buffer,
  74.               oldtext, icons[icon].data.indirecttext.bufflen - 1);
  75.       icons[icon].data.indirecttext.buffer[
  76.                icons[icon].data.indirecttext.bufflen - 1] = 0;
  77.  
  78.       oldtext = icons[icon].data.indirecttext.validstring;
  79.       if ((int)oldtext > 0)
  80.       {
  81.         int size;
  82.  
  83.         size = strlencr(oldtext);
  84.         icons[icon].data.indirecttext.validstring = (char *) malloc(size + 1);
  85.         if (icons[icon].data.indirecttext.validstring == NULL)
  86.           Error_ReportFatalInternal(ERR1, ERRMESS1);
  87.  
  88.         strncpy(icons[icon].data.indirecttext.validstring, oldtext, size);
  89.         icons[icon].data.indirecttext.validstring[size] = 0;
  90.       }
  91.     }
  92.   }
  93.  
  94.   return(window);
  95. }
  96.